package pl.edu.pk.psb.assembler;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import pl.edu.pk.psb.bc.bo.PolaczenieBo;
import pl.edu.pk.psb.bc.bo.PrzystanekBo;
import pl.edu.pk.psb.bc.dto.PolaczenieDto;
import pl.edu.pk.psb.bc.dto.TrasaDto;
import pl.edu.pk.psb.command.TrasaCommand;

@Component
public class TrasaCommandAssembler {

	@Autowired
	PrzystanekBo przystanekBo;

	public TrasaDto konwertuj(TrasaCommand cmd) {
		TrasaDto dto = new TrasaDto();
		dto.setId(cmd.getId());
		dto.setPrzystanek(przystanekBo.pobierzPrzystanek(cmd.getIdPrzystanku()));
		Integer godzinaPrzyjazdu = null;
		Integer minutaPrzyjazdu = null;
		Integer godzinaOdjazdu = null;
		Integer minutaOdjazdu = null;
		if (cmd.getGodzinaPrzyjazdu() != null)
			godzinaPrzyjazdu = Integer.parseInt(cmd.getGodzinaPrzyjazdu());
		if (cmd.getMinutaPrzyjazdu() != null)
			minutaPrzyjazdu = Integer.parseInt(cmd.getMinutaPrzyjazdu());
		if (cmd.getGodzinaOdjazdu() != null)
			godzinaOdjazdu = Integer.parseInt(cmd.getGodzinaOdjazdu());
		if (cmd.getGodzinaPrzyjazdu() != null)
			minutaOdjazdu = Integer.parseInt(cmd.getMinutaOdjazdu());
		Calendar c = null;
		if (godzinaOdjazdu != null) {
			c = new GregorianCalendar();
			c.set(Calendar.SECOND, 00);
			c.set(Calendar.MINUTE, minutaPrzyjazdu);
			c.set(Calendar.HOUR_OF_DAY, godzinaPrzyjazdu);
		}
		dto.setCzasPrzyjazdu(c);
		Calendar cal = null;
		if (godzinaPrzyjazdu != null) {
			cal = new GregorianCalendar();
			cal.set(Calendar.SECOND, 00);
			cal.set(Calendar.MINUTE, minutaOdjazdu);
			cal.set(Calendar.HOUR_OF_DAY, godzinaOdjazdu);
		}
		dto.setCzasOdjazdu(cal);
		dto.setKolejnoscWpolaczeniu(cmd.getKolejnoscNaTrasie());
		return dto;

	}

	public TrasaCommand konwertuj(TrasaDto dto) {
		TrasaCommand cmd = new TrasaCommand();
		cmd.setIdPrzystanku(dto.getPrzystanek().getId());
		Calendar czasOdjazdu = dto.getCzasOdjazdu();
		Calendar czasPrzyjazdu = dto.getCzasPrzyjazdu();
		cmd.setGodzinaOdjazdu(czasOdjazdu.get(Calendar.HOUR_OF_DAY) + " ");
		cmd.setMinutaOdjazdu(czasOdjazdu.get(Calendar.MINUTE) + " ");
		cmd.setGodzinaPrzyjazdu(czasPrzyjazdu.get(Calendar.HOUR_OF_DAY) + " ");
		cmd.setMinutaPrzyjazdu(czasPrzyjazdu.get(Calendar.MINUTE) + " ");
		cmd.setKolejnoscNaTrasie(dto.getKolejnoscWpolaczeniu());
		cmd.setPrzystanekNazwa(dto.getPrzystanek().getNazwa());
		cmd.setPrzystanekNazwa(dto.getPrzystanek().getNazwa());
		return cmd;

	}

	public List<TrasaDto> konwertujListe(List<TrasaCommand> cmd) {
		List<TrasaDto> lista = new ArrayList<TrasaDto>();
		int i = 1;
		for (TrasaCommand c : cmd) {
			lista.add(konwertuj(c));
		}
		return lista;
	}

	public List<TrasaCommand> konwertujListeDto(List<TrasaDto> listaDto) {
		List<TrasaCommand> listaCmd = new ArrayList<TrasaCommand>();
		for (TrasaDto l : listaDto) {
			listaCmd.add(konwertuj(l));
		}
		return listaCmd;
	}
}